
// 引入Redis
import Redis from 'koa-redis'
// 引入用户集合
import User from '../../dbs/models/user'
import axios from '../utils/axios'

module.exports = async (ctx) => {
  const Store = new Redis().client
  // 获取客户端传递过来的内容
  const { username, password, email, code } = ctx.request.body

  // 比对验证码
  if (code) {
    // 获取Redis中的验证码和过期时间
    const saveCode = await Store.hget(`nodemail:${username}`, 'code')
    const saveExpire = await Store.hget(`nodemail:${username}`, 'expire')
    console.log(saveCode, saveExpire, code)
    if (code.toUpperCase() === saveCode) {
      // 验证码相等，判断是否过期
      if (new Date().getTime() - saveExpire > 0) {
        // 验证码已过期
        ctx.body = {
          code: -1,
          msg: '验证码已过期，请重新尝试'
        }
        return false
      } else {
        // 验证码相等并且没过期
        ctx.body = {
          code: 0,
          msg: '验证码有效'
        }
      }
    } else {
      // 验证码不相等
      ctx.body = {
        code: -1,
        msg: '请填写正确的验证码'
      }
      return false
    }
  } else {
    // 验证码为空
    ctx.body = {
      code: -1,
      msg: '请填写验证码'
    }
    return false
  }
  // 根据邮箱查询注册的用户是否已经存在
  const user = await User.find({ email })
  if (user.length) {
    // 用户已存在
    ctx.body = {
      code: -1,
      msg: '邮箱已被注册'
    }
    // 阻止程序向下执行
    return false
  }
  // 用户不存在，写库操作
  const newUser = await User.create({ username, password, email })
  if (newUser) {
    const res = await axios.post('/users/signin', { username: email, password })
    console.log(res)
    if (res.data && res.data.code === 0) {
      ctx.body = {
        code: 0,
        msg: '注册成功',
        user: res.data.user
      }
    } else {
      ctx.body = {
        code: -1,
        msg: 'error'
      }
    }
  } else {
    ctx.body = {
      code: -1,
      msg: '注册失败'
    }
  }
}
